﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using GRC_TPE_WebApp.Model;

namespace GRC_TPE_WebApp.Controller
{
    public static class ContactController
    {
        /// <summary>
        /// Permet d'ajouter un contact en base
        /// </summary>
        /// <param name="function"></param>
        /// <param name="lastname"></param>
        /// <param name="firstname"></param>
        /// <param name="email"></param>
        /// <param name="clientId"></param>
        /// <param name="phone"></param>
        /// <returns></returns>
        public static string AddContact(String function, String lastname, String firstname, String email, String clientId, int phone)
        {
            try
            {
                string ret = string.Empty;

                Model_GRC_TPEContainer database = new Model_GRC_TPEContainer();

                //Création d'un contact temporaire, afin d'effectuer l'insertion en base
                Contact currentContact = new Contact();

                //Transforme la string en paramètre en int, sinon déclenche l'erreur "Erreur lors de l'ajout d'un contact"
                int RequestClientID = int.Parse(clientId);

                //Ajout des paramètres au contact courant
                currentContact.Function = function;
                currentContact.Firstname = firstname;
                currentContact.Lastname = lastname;
                currentContact.Email = email;
                currentContact.Phone = "0" + phone.ToString();
                currentContact.ClientId = RequestClientID;

                //Ajout en base
                database.AddToContactSet(currentContact);

                //Commit
                database.SaveChanges();

                ret = "No error";

                return ret;
            }
            catch (Exception ex)
            {
                return "Erreur lors de l'ajout d'un contact";
            }
        }

        /// <summary>
        /// Méthode récupérant un Contact en base avec son id
        /// </summary>
        /// <param name="idContact"></param>
        /// <returns></returns>
        public static string[] GetContactFields(int idContact)
        {
            try
            {
                string[] ret = null;

                Model_GRC_TPEContainer database = new Model_GRC_TPEContainer();

                /// récupération du Contact par son id
                Contact existingContact = (from cli in database.ContactSet
                                         where cli.Id == idContact
                                         select cli).First();

                if (existingContact != null)
                {
                    ret = new string[6];

                    ret[0] = existingContact.Firstname;
                    ret[1] = existingContact.Lastname;
                    ret[2] = existingContact.Email;
                    ret[3] = existingContact.Function;
                    ret[4] = existingContact.Phone.ToString();
                    ret[5] = existingContact.Client.Name;
                }
                else
                {
                    ret = new string[1];
                    ret[0] = String.Format("Le contact d'id '{0}' n'existe pas.", idContact);
                }

                return ret;
            }
            catch (Exception ex)
            {
                string[] ret = new string[1];

                ret[0] = String.Format("Une erreur est survenue lors de la récupération du contact d'id '{0}' en base.", idContact);

                return ret;
            }
        }

        /// <summary>
        /// Méthode de modification d'un Contact en base
        /// </summary>
        /// <param name="idContact"></param>
        /// <param name="firstname"></param>
        /// <param name="lastname"></param>
        /// <param name="email"></param>
        /// <param name="function"></param>
        /// <param name="phone"></param>
        /// <returns></returns>
        public static string EditContact(int idContact, string firstname, string lastname, string email, string function, int phone)
        {
            try
            {
                string ret = string.Empty;

                Model_GRC_TPEContainer database = new Model_GRC_TPEContainer();

                /// récupération du Contact par son id
                Contact existingContact = (from cli in database.ContactSet
                                         where cli.Id == idContact
                                         select cli).First();

                if (existingContact != null)
                {
                    existingContact.Firstname = firstname;
                    existingContact.Lastname = lastname;
                    existingContact.Email = email;
                    existingContact.Function = function;
                    existingContact.Phone = "0" + phone.ToString();
                }
                else
                {
                    ret = String.Format("Le contact d'id '{0}' n'existe pas.", idContact);
                }

                database.SaveChanges();

                ret = "No error";

                return ret;
            }
            catch (Exception ex)
            {
                return string.Format("Erreur lors de la mise à jour du contact d'id '{0}'.", idContact);
            }
        }

        /// <summary>
        /// Suppression d'une Contact
        /// </summary>
        /// <param name="idContact"></param>
        /// <returns></returns>
        public static string DeleteContact(int idContact)
        {
            try
            {
                string ret = string.Empty;

                Model_GRC_TPEContainer database = new Model_GRC_TPEContainer();

                /// récupération de la communication par son id
                Contact existingContact = (from com in database.ContactSet
                                                       where com.Id == idContact
                                                       select com).First();

                if (existingContact != null)
                {
                    database.DeleteObject(existingContact);
                    database.SaveChanges();
                }
                else
                {
                    ret = String.Format("Le contact d'id '{0}' n'existe pas.", idContact);
                }

                ret = "No error";

                return ret;
            }
            catch (Exception ex)
            {
                return string.Format("Erreur lors de la suppression de la contact d'id '{0}'.", idContact);
            }
        }
    }
}